/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */



/**
 *
 * @authors cnavarro, dverstraete
 */
public class Arbre<T> {

    public Noeud<T> racine;
    public Noeud<T> vue;

    /**
     * Constructeur
     */
    public Arbre ()
    {
        this.racine = null;
        this.vue = null;
    }

    /**
     * Initialisation de la racine
     * @param item
     */
    public void initRacine(T item)
    {
        this.racine = new Noeud(item, null);
        this.vue = this.racine;
    }

    /**
     * Ajoute un fils à la vue
     * @param item
     */
    public void addFils(T item)
    {
        this.vue.ajouterFils(item);
    }

    /**
     * Retourne l'item de la vue
     * @return
     */
    public T getItem()
    {
        return this.vue.getInfo();
    }

    /**
     * Retourne vrai si la vue est la racine, faux sinon
     * @return
     */
    public boolean isRacine()
    {
        return this.racine.equals(this.vue);
    }

    /**
     * Retourne vrai si la vue est un noeud feuille, faux sinon
     * @return
     */
    public boolean isNoeudFeuille()
    {
        return this.vue.isNoeudFeuille();
    }

    /**
     * Retourne le nombre de fils de la vue
     * @return
     */
    public int getNbFils()
    {
        return this.vue.getNbFils();
    }

    /**
     * Place la vue à la racine
     */
    public void gotoRacine ()
    {
        this.vue = this.racine;
    }

    /**
     * Place la vue au fils i passé en paramètre
     * 0 correspond au premier fils, etc...
     * @param i
     */
    public void gotoFils (int i)
    {
        if(this.vue.getNbFils() > i)
        {
            this.vue = this.vue.getFils().get(i);
        }else {
           System.out.println("Erreur: Impossible d'aller au fils, il n'existe pas.");
        }
    }

    /**
     * Place la vue au père de la vue, s'il existe, sinon à la racine
     */
    public void gotoPere ()
    {
        if(!this.isRacine())
        {
           this.vue = this.vue.getPere();
        } else {
            System.out.println("Erreur: Impossible d'aller au pere, la vue est à la racine.");
        }
    }

}
